<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

</body>
<script>
//    【1】考察普通的函数在for循环内部的执行【输出0,1,2，3,4】
//    for( i = 0;i < 5 ;i ++ ){
//        console.log(i);
//    }
////    【2】考察定时函数的执行机制【输出5个5，好像是每一秒一个5】
//    for( i = 0; i < 5; i++){
//        setTimeout(function(){
//            console.log(i);
//        },1000*i)
//    }
//    【3】考察闭包在for循环中怎么保存i值【输出0,1,2,3,4】
//    for( i = 0;i < 5; i++){
//        (function(i){
//            setTimeout(function(){
//                console.log(i);
//            },1000*i)
//        })(i)
//    }
//    【4】考察闭包无形参的机制【还是每一秒输出一个5】
//    for (var i = 0; i < 5; i++) {
//        (function() {
//            setTimeout(function() {
//                console.log(i);
//            }, i * 1000);
//        })(i);
//    }
//    【5】考察setTimeout函数语法，【输出0,1,2,3,4】
//setTimeout("alert('5seconds!')",1000)，setTimeout函数首参只能是函数或字符串，
//如果传入的是个闭包，比如下面，返回值是undefined，但是里面函数照常立即执行，后面的计时失效。

//    for (var i = 0; i < 5; i++) {
//        setTimeout((function(i) {
//            console.log(i);
//        })(i), i * 1000);
//    }
    //【5-1】下面结果输出1，不是5秒后，是立即执行。
//    setTimeout((function() {
//        console.log(1);
//    })(),5000);
//    【6】http://www.jianshu.com/p/063f7e490e9a
    setTimeout(function() {
        console.log(1)
    }, 0);
    new Promise(function executor(resolve) {
        console.log(2);
        for( var i=0 ; i<10000 ; i++ ) {
            i == 9999 && resolve();
        }
        console.log(3);
    }).then(function() {
                console.log(4);
            });
    console.log(5);
</script>
</html>